//给你一个下标从 0 开始的 m x n 整数矩阵 grid 。矩阵中某一列的宽度是这一列数字的最大 字符串长度 。 
//
// 
// 比方说，如果 grid = [[-10], [3], [12]] ，那么唯一一列的宽度是 3 ，因为 -10 的字符串长度为 3 。 
// 
//
// 请你返回一个大小为 n 的整数数组 ans ，其中 ans[i] 是第 i 列的宽度。 
//
// 一个有 len 个数位的整数 x ，如果是非负数，那么 字符串长度 为 len ，否则为 len + 1 。 
//
// 
//
// 示例 1： 
//
// 输入：grid = [[1],[22],[333]]
//输出：[3]
//解释：第 0 列中，333 字符串长度为 3 。
// 
//
// 示例 2： 
//
// 输入：grid = [[-15,1,3],[15,7,12],[5,6,-2]]
//输出：[3,1,2]
//解释：
//第 0 列中，只有 -15 字符串长度为 3 。
//第 1 列中，所有整数的字符串长度都是 1 。
//第 2 列中，12 和 -2 的字符串长度都为 2 。
// 
//
// 
//
// 提示： 
//
// 
// m == grid.length 
// n == grid[i].length 
// 1 <= m, n <= 100 
// -10⁹ <= grid[r][c] <= 10⁹ 
// 
//
// Related Topics 数组 矩阵 👍 15 👎 0


package LeetCode.editor.cn;

/**
 * @author ldltd
 * @date 2024-04-27 11:18:02
 * @description 2639.查询网格图中每一列的宽度
 */
public class FindTheWidthOfColumnsOfAGrid{
	 public static void main(String[] args) {
	 	 //测试代码
	 	 FindTheWidthOfColumnsOfAGrid fun=new FindTheWidthOfColumnsOfAGrid();
	 	 Solution solution = fun.new Solution();
		 System.out.println(String.valueOf(-12).length());
	 }
	 
//力扣代码
//leetcode submit region begin(Prohibit modification and deletion)
class Solution {
    public int[] findColumnWidth1(int[][] grid) {
		int [] res=new int[grid[0].length];
		for (int i = 0; i < grid[0].length; i++) {
			for (int j = 0; j < grid.length; j++) {
				res[i]=Math.max(res[i], Integer.toString(grid[j][i]).length());
			}

		}
		return res;
    }

	//优化为先找出绝对值最大的，再计算长度
	public int[] findColumnWidth(int[][] grid) {
		int n = grid[0].length;
		int[] ans = new int[n];
		for (int j = 0; j < n; j++) {
			int mn = 0;
			int mx = 0;
			//找出每一列的最大最小值
			for (int[] row : grid) {
				mn = Math.min(mn, row[j]);
				mx = Math.max(mx, row[j]);
			}
			//0的长度是1
			int len = 1;
			//mx/10或者mn*-10
			for (int x = Math.max(mx / 10, -mn); x > 0; x /= 10) {
				len++;
			}
			ans[j] = len;
		}
		return ans;
	}

}
//leetcode submit region end(Prohibit modification and deletion)

}
